package Math;
/**
 *描述
 * 在不使用额外的内存空间的条件下判断一个整数是否是回文。
 * 回文指逆序和正序完全相同。
 *
 *
 * 数据范围：-2^{31}  n  2^{31}-1

 * 进阶： 空间复杂度 O(1)，时间复杂度 O(len(n))
 *
 * 提示：
 * 负整数可以是回文吗？（比如-1）
 * 如果你在考虑将数字转化为字符串的话，请注意一下不能使用额外空间的限制
 * 你可以将整数翻转。但是，如果你做过题目“反转数字”，你会知道将整数翻转可能会出现溢出的情况，你怎么处理这个问题？
 *
 *
 *
 * */
public class 回文数字 {
    /**
     *
     * @param x int整型
     * @return bool布尔型
     */
    public static boolean isPalindrome (int x) {
        // write code here
        //特例
        if(x<0){
            return false;
        }
        if(x<=9){
            return true;
        }
        //判断该整数有多少位
        int div = 1;
        while (x / div >= 10){
            div *= 10;
        }
        // 循环停止
        while (x > 0) {
            //取最高位
            int left = x / div;
            //取最低位
            int right = x % 10;
            // 如果不同则表示不是回文
            if (left != right){
                return false;
            }
            //x去掉最高位和最低位
            x = (x % div) / 10;
            //位数缩减两位
            div /= 100;
        }
        return true;

    }

    public static void main(String[] args) {
        System.out.println(isPalindrome(121));
    }
}
